package storage

import (
	"context"
	"io"
	"time"
)

// StorageType 存储类型
type StorageType string

const (
	// StorageTypeLocal 本地存储
	StorageTypeLocal StorageType = "local"
	// StorageTypeOSS 阿里云OSS存储
	StorageTypeOSS StorageType = "oss"
	// StorageTypeCOS 腾讯云COS存储
	StorageTypeCOS StorageType = "cos"
	// StorageTypeQiniu 七牛云存储
	StorageTypeQiniu StorageType = "qiniu"
)

// FileInfo 文件信息
type FileInfo struct {
	Name         string    `json:"name"`          // 文件名
	Path         string    `json:"path"`          // 文件路径
	URL          string    `json:"url"`           // 访问URL
	Size         int64     `json:"size"`          // 文件大小
	ContentType  string    `json:"content_type"`  // 内容类型
	LastModified time.Time `json:"last_modified"` // 最后修改时间
}

// UploadOption 上传选项
type UploadOption struct {
	Path        string            // 存储路径
	ContentType string            // 内容类型
	Metadata    map[string]string // 元数据
	Expiration  time.Duration     // 过期时间（针对临时URL）
	IsPublic    bool              // 是否公开访问
}

// Storage 存储接口
type Storage interface {
	// Upload 上传文件
	Upload(ctx context.Context, name string, reader io.Reader, option *UploadOption) (*FileInfo, error)

	// Delete 删除文件
	Delete(ctx context.Context, path string) error

	// GetURL 获取文件访问URL
	GetURL(ctx context.Context, path string, expiration time.Duration) (string, error)

	// GetFileInfo 获取文件信息
	GetFileInfo(ctx context.Context, path string) (*FileInfo, error)

	// ListFiles 列出指定目录下的文件
	ListFiles(ctx context.Context, prefix string) ([]*FileInfo, error)

	// Type 获取存储类型
	Type() StorageType
}

// StorageConfig 存储配置接口
type StorageConfig interface {
	// GetStorageType 获取存储类型
	GetStorageType() StorageType
}
